
/**
 * @brief 用于将armclang 标准C 库的heap 管理函数替换成FreeRTOS 提供的版本
 *
 */

// C lib
#include <stdint.h>
#include <stdlib.h>

// FreeRTOS
//#include <portable.h>

extern void vPortFree( void * pv );
extern void * pvPortCalloc( size_t xNum, size_t xSize );
extern void vPortFree( void * pv );

// 修改后的heap_4_realloc.c 提供realloc 函数实现
extern void *pvPortRealloc( void *SrcAddr, size_t NewSize)


// 声明不使用C库的堆管理函数
__asm(".global __use_no_heap_region\n\t");


void *malloc(size_t size) {
    return pvPortMalloc(size);
}


void free(void *p) {
    vPortFree(p);
}


/**
 * @brief 依赖于修改后的heap_4_realloc.c 提供realloc 函数实现
 * 
 * FreeRTOS 的 heap_4.c 没有提供realloc，
 * 
 * @param p 
 * @param want 
 * @return void* 
 */
void *realloc(void *p, size_t want) {
    return pvPortRealloc(p, want);
}


void *calloc(size_t nmemb, size_t size) {
    return pvPortCalloc(nmemb, size);
}